package com.course.utils;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.UUID;

//文件工具类
public class FileUtils {

    /**
     * 写入文件到磁盘
     * @param file  文件对象
     * @param destBasePath  目标写入基础路径,例如："D:/shbw1712a/upload"
     */
    public static String writeFileToDisk(MultipartFile file,String destBasePath) throws Exception {
        //1.生成随机文件名  xxx.xx.jpg
        //获取原始文件名
        String originalFilename = file.getOriginalFilename();
        //获取真实文件名的后缀 jpg
        String houzhui = originalFilename.substring(originalFilename.lastIndexOf("."));

        //目标文件名：随机+后缀
        String destFileName= UUID.randomUUID().toString()+houzhui;
        //构建目标文件名路径
        String destFileNamePath=destBasePath+"/"+destFileName;

        //2.将文件写入磁盘

        file.transferTo(new File(destFileNamePath));

        //返回真实的文件名
        return destFileName;
    }

//    //文件上传
//    @Value("${bobohost.fileBasePath}")
//    private String fileBasePath;
//
//    //图片上传
//    @PostMapping("/uploadimage")
//    public ResultDTO updateImage(@RequestBody MultipartFile file) throws Exception {
////        String destFileName = FileUtils.writeFileToDisk(file, "D:/shbw1801a/upload");
//        //使用配置文件中路径的注入
//        String destFileName = FileUtils.writeFileToDisk(file, fileBasePath);
//
//        return new ResultDTO(true,"上传成功",new FileDTO(destFileName,null));
//    }

    /**
     *从磁盘读取下载文件
     * @param fileNamePath 下载的文件完整路径
     * @param realFileName 真实文件名
     * @param response 响应对象
     * @throws UnsupportedEncodingException
     */
    public static void downloadFileFromDisk(String fileNamePath,String realFileName, HttpServletResponse response) throws UnsupportedEncodingException {
        File file = new File(fileNamePath);

        if(file.exists()){ //判断文件父目录是否存在
            response.setContentType("image/jpg;charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            // response.setContentType("application/force-download");
            response.setHeader("Content-Disposition", "attachment;fileName=" +   java.net.URLEncoder.encode(realFileName,"UTF-8"));
            byte[] buffer = new byte[1024];
            FileInputStream fis = null; //文件输入流
            BufferedInputStream bis = null;

            OutputStream os = null; //输出流
            try {
                os = response.getOutputStream();
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                int i = bis.read(buffer);
                while(i != -1){
                    os.write(buffer);
                    i = bis.read(buffer);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

            System.out.println("----------file download---" + realFileName);
            try {
                bis.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

//    /**
//     * 下载图片
//     * @param realFileName 参数就是真实文件名
//     * @return
//     * @throws Exception
//     */
//    @GetMapping("/downimage/{realFileName}")
//    public ResultDTO downloadImage(@PathVariable String realFileName, HttpServletResponse response ) throws Exception {
//        //拼接文件路径
//        String filePathName=fileBasePath+"/"+realFileName;
//
//        //将图片写入响应流中
//        //参数1：真实文件完整路径
//        //参数2：原来的文件名，这里就写真实文件名就行
//        //参数3：响应对象
//        FileUtils.downloadFileFromDisk(filePathName,realFileName,response);
//
//        return new ResultDTO(true,"下载成功");
//    }

}
